package com.zhoust.ratelimiter.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;

/**
 * @author 15703
 * @version 1.0
 * @Title
 * @package com.zhoust.ratelimiter.config
 * @date 2021/4/21 20:10
 * @desc 配置 redis+lua 分布式限流的 需要加载的bean
 */
@Configuration
public class RedisConfiguration {

    /**
     * 如果本地也配置了StringRedisTemplate，可能会产生冲突
     * 可以指定 @Primary，或者指定加载特定的 @Qualifier
     * @param factory
     * @return
     */
    @Bean
    public RedisTemplate<String,String> redisTemplate(RedisConnectionFactory factory){
        return new StringRedisTemplate(factory);
    }


    @Bean
    public DefaultRedisScript redisScript(){
        DefaultRedisScript defaultRedisScript = new DefaultRedisScript();
        defaultRedisScript.setLocation(new ClassPathResource("rateLimiter.lua"));
        defaultRedisScript.setResultType(java.lang.Boolean.class);
        return defaultRedisScript;

    }

}
